package org.example.fastJsonEnumSerializer;

import com.alibaba.fastjson2.annotation.JSONType;

@JSONType(serializer = EnumSerializer.class, deserializer = EnumDeserializer.class)
public interface BaseEnum<T> {

    /**
     * 获取枚举的值（用于序列化）
     * @return 枚举值
     */
    T getValue();

    /**
     * 根据值获取枚举实例（用于反序列化）
     * @param enumClass 枚举类
     * @param value 枚举值
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 如果找不到对应的枚举值
     */
    static <E extends Enum<E> & BaseEnum<T>, T> E fromValue(Class<? extends BaseEnum> enumClass, T value) {
        if (value == null) {
            return null;
        }

        for (BaseEnum e : enumClass.getEnumConstants()) {
            if (value.equals(e.getValue())) {
                return (E) e;
            }
        }

        throw new IllegalArgumentException("No enum constant " + enumClass.getCanonicalName() + " for value '" + value + "'");
    }
}